//package plugin;
//
//import org.mybatis.generator.api.IntrospectedTable;
//import org.mybatis.generator.api.PluginAdapter;
//import org.mybatis.generator.api.dom.java.*;
//
//import java.util.List;
//import java.util.Properties;
//
///**
// * Example类和model类实现序列化插件
// * Created by admin on 2017/1/1.
// */
//public class SerializablePlugin extends PluginAdapter {
//    private FullyQualifiedJavaType serializable = new FullyQualifiedJavaType("java.io.Serializable");
//    private FullyQualifiedJavaType gwtSerializable = new FullyQualifiedJavaType("com.google.gwt.user.client.rpc.IsSerializable");
//    private boolean addGWTInterface;
//    private boolean suppressJavaInterface;
//
//    public SerializablePlugin() {
//    }
//
//    public boolean validate(List<String> warnings) {
//        return true;
//    }
//
//    public void setProperties(Properties properties) {
//        super.setProperties(properties);
//        this.addGWTInterface = Boolean.valueOf(properties.getProperty("addGWTInterface")).booleanValue();
//        this.suppressJavaInterface = Boolean.valueOf(properties.getProperty("suppressJavaInterface")).booleanValue();
//    }
//
//    public boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
//        this.makeSerializable(topLevelClass, introspectedTable);
//        return true;
//    }
//
//    public boolean modelPrimaryKeyClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
//        this.makeSerializable(topLevelClass, introspectedTable);
//        return true;
//    }
//
//    public boolean modelRecordWithBLOBsClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
//        this.makeSerializable(topLevelClass, introspectedTable);
//        return true;
//    }
//
//    protected void makeSerializable(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
//        if(this.addGWTInterface) {
//            topLevelClass.addImportedType(this.gwtSerializable);
//            topLevelClass.addSuperInterface(this.gwtSerializable);
//        }
//
//        if(!this.suppressJavaInterface) {
//            topLevelClass.addImportedType(this.serializable);
//            topLevelClass.addSuperInterface(this.serializable);
//            Field field = new Field();
//            field.setFinal(true);
//            field.setInitializationString("1L");
//            field.setName("serialVersionUID");
//            field.setStatic(true);
//            field.setType(new FullyQualifiedJavaType("long"));
//            field.setVisibility(JavaVisibility.PRIVATE);
//            this.context.getCommentGenerator().addFieldComment(field, introspectedTable);
//            topLevelClass.addField(field);
//        }
//
//    }
//
//    /**
//     * 添加给Example类序列化的方法
//     * @param topLevelClass
//     * @param introspectedTable
//     * @return
//     */
//    @Override
//    public boolean modelExampleClassGenerated(TopLevelClass topLevelClass,IntrospectedTable introspectedTable){
//        makeSerializable(topLevelClass, introspectedTable);
//
//        for (InnerClass innerClass : topLevelClass.getInnerClasses()) {
//            if ("GeneratedCriteria".equals(innerClass.getType().getShortName())) {
//                innerClass.addSuperInterface(serializable);
//            }
//            if ("Criteria".equals(innerClass.getType().getShortName())) {
//                innerClass.addSuperInterface(serializable);
//            }
//            if ("Criterion".equals(innerClass.getType().getShortName())) {
//                innerClass.addSuperInterface(serializable);
//            }
//        }
//
//        return true;
//    }
//
//}
